package co.edu.udea.sigepi.data.dao;

import java.util.List;

import co.edu.udea.sigepi.data.dao.exception.DAOException;

/**
 * (DAO, Objeto de Acceso a Datos) Componente de acceso a datos reutilizable
 * para no reescribir las operaciones basicas sobre los objetos del dominio.
 * 
 * @param <T>
 */
public interface DAOGenerico<T extends Object> {
	/**
	 * Permite cargar una entidad de manera generica
	 * 
	 * @param id 
	 * 			el id de la entidad a cargar
	 * @return La entidad cargada
	 * @throws DAOException
	 */
	public T getById(int id) throws DAOException;

	/**
	 * Permite guardar una entidad de manera generica
	 * 
	 * @param entidad
	 *            la entidad a guardar
	 * @throws DAOException
	 */
	public void guardar(T entidad) throws DAOException;

	/**
	 * Lista todas las entidades en el repositorio del tipo definido
	 * 
	 * @return El listado de instancias
	 * @throws DAOException
	 */
	public List<T> listar(String clausulaWhere) throws DAOException;
}